Server এবং Client Side Socket Programming এর উদাহরণ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket API এবং এর ব্যবহার (Socket API and Its Usage) |
221
221

Socket Programming-এ ক্লায়েন্ট এবং সার্ভার উভয়কেই Socket ব্যবহার করে নেটওয়ার্কে যোগাযোগ স্থাপন করতে হয়। নিচে TCP (Transmission Control Protocol) ব্যবহার করে একটি সাধারণ ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশন উদাহরণ দেখানো হয়েছে, যেখানে সার্ভার একটি নির্দিষ্ট পোর্টে সংযোগ গ্রহণ করে এবং ক্লায়েন্ট সেই সার্ভারের সাথে সংযোগ স্থাপন করে ডেটা আদান-প্রদান করে।

TCP সার্ভার প্রোগ্রাম উদাহরণ (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
   int server_fd, new_socket;
   struct sockaddr_in address;
   int addrlen = sizeof(address);
   char buffer[1024] = {0};
   char *hello = "Hello from server";
   // 1. Socket তৈরি করা
   if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
       perror("Socket creation failed");
       exit(EXIT_FAILURE);
   }
   // 2. সার্ভার ঠিকানা সেটআপ করা
   address.sin_family = AF_INET;
   address.sin_addr.s_addr = INADDR_ANY;
   address.sin_port = htons(PORT);
   // 3. Binding করা
   if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
       perror("Bind failed");
       exit(EXIT_FAILURE);
   }
   // 4. Listening করা
   if (listen(server_fd, 3) < 0) {
       perror("Listen failed");
       exit(EXIT_FAILURE);
   }
   printf("Server is listening on port %d\n", PORT);
   // 5. Accepting সংযোগ
   if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
       perror("Accept failed");
       exit(EXIT_FAILURE);
   }
   // 6. ডেটা গ্রহণ করা
   read(new_socket, buffer, 1024);
   printf("Client: %s\n", buffer);
   // 7. ডেটা পাঠানো
   send(new_socket, hello, strlen(hello), 0);
   printf("Hello message sent to client\n");
   // 8. Socket বন্ধ করা
   close(new_socket);
   close(server_fd);
   return 0;
}

TCP ক্লায়েন্ট প্রোগ্রাম উদাহরণ (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
   int sock = 0;
   struct sockaddr_in serv_addr;
   char *hello = "Hello from client";
   char buffer[1024] = {0};
   // 1. Socket তৈরি করা
   if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
       printf("Socket creation failed\n");
       return -1;
   }
   // 2. সার্ভার ঠিকানা সেটআপ করা
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_port = htons(PORT);
   // 3. IP Address সেট করা
   if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
       printf("Invalid address or Address not supported\n");
       return -1;
   }
   // 4. সার্ভারের সাথে সংযোগ স্থাপন করা
   if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
       printf("Connection Failed\n");
       return -1;
   }
   // 5. ডেটা পাঠানো
   send(sock, hello, strlen(hello), 0);
   printf("Hello message sent to server\n");
   // 6. ডেটা গ্রহণ করা
   read(sock, buffer, 1024);
   printf("Server: %s\n", buffer);
   // 7. Socket বন্ধ করা
   close(sock);
   return 0;
}

প্রোগ্রামগুলোর বিশ্লেষণ

সার্ভার প্রোগ্রাম:

Socket তৈরি:

  • socket() System Call ব্যবহার করে সার্ভার Socket তৈরি করা হয়, যা AF_INET (IPv4) এবং SOCK_STREAM (TCP) ব্যবহার করে।

Binding:

  • bind() ফাংশন সার্ভার Socket-কে একটি নির্দিষ্ট IP Address এবং Port Number (8080) এর সাথে সংযুক্ত করে, যাতে এটি ইনকামিং সংযোগ গ্রহণ করতে পারে।

Listening:

  • listen() ফাংশন সার্ভার Socket-কে ইনকামিং সংযোগ গ্রহণের জন্য অপেক্ষা করতে প্রস্তুত করে। এখানে 3 প্যারামিটারটি ব্যাকলগ নির্দেশ করে, যা সার্ভার কতটি ইনকামিং সংযোগ কিউতে রাখতে পারবে।

Accepting সংযোগ:

  • accept() ফাংশন ব্যবহার করে ইনকামিং সংযোগ গ্রহণ করা হয় এবং একটি নতুন Socket তৈরি করা হয়, যা ক্লায়েন্টের সাথে ডেটা ট্রান্সফারের জন্য ব্যবহৃত হয়।

ডেটা পাঠানো এবং গ্রহণ:

  • read() এবং send() ফাংশন ব্যবহার করে ক্লায়েন্ট থেকে ডেটা গ্রহণ এবং ক্লায়েন্টে ডেটা পাঠানো হয়।

Socket বন্ধ করা:

  • close() ফাংশন ব্যবহার করে সার্ভার এবং ক্লায়েন্ট Socket বন্ধ করা হয়।

ক্লায়েন্ট প্রোগ্রাম:

Socket তৈরি:

  • socket() System Call ব্যবহার করে ক্লায়েন্ট Socket তৈরি করা হয়।

সার্ভারের ঠিকানা সেটআপ:

  • inet_pton() ফাংশন ব্যবহার করে সার্ভারের IP Address (127.0.0.1, যা localhost) এবং Port Number (8080) সেট করা হয়।

সার্ভারের সাথে সংযোগ স্থাপন:

  • connect() ফাংশন ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করা হয়।

ডেটা পাঠানো এবং গ্রহণ:

  • send() এবং read() ফাংশন ব্যবহার করে ক্লায়েন্ট ডেটা পাঠায় এবং সার্ভার থেকে ডেটা গ্রহণ করে।

Socket বন্ধ করা:

  • close() ফাংশন ব্যবহার করে ক্লায়েন্ট Socket বন্ধ করা হয়।

কিভাবে এই প্রোগ্রামগুলো চালাবেন

  1. প্রথমে, সার্ভার প্রোগ্রামটি চালু করুন। এটি একটি নির্দিষ্ট পোর্টে (এখানে 8080) ইনকামিং সংযোগের জন্য অপেক্ষা করবে।
  2. এরপর ক্লায়েন্ট প্রোগ্রামটি চালান। ক্লায়েন্ট প্রোগ্রাম সার্ভারের সাথে সংযোগ স্থাপন করবে এবং বার্তা পাঠাবে।
  3. সার্ভার সেই বার্তা গ্রহণ করবে এবং ক্লায়েন্টকে একটি সাড়া পাঠাবে।
  4. উভয় প্রোগ্রামেই একটি বার্তা প্রদর্শিত হবে, যা দেখাবে যে ক্লায়েন্ট এবং সার্ভার কী পাঠাচ্ছে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion